package com.kaikeba.dao;

import com.kaikeba.bean.User;
import com.kaikeba.exception.DuplicateCodeException;

import java.util.List;
import java.util.Map;

/**
 * @description:
 * @author: ManolinCoder
 * @time: 2021/9/4
 */
public interface BaseUserDao {

    /**
     * @Author LC
     * @Description //TODO 查询用户表中所有记录包括总数和新增（新增就是注册时间与当前时间相同）,ustatus为1的不算
     * @Date 15:00 2021/9/4
     * @Param []
     * @return java.util.Map<java.lang.String,java.lang.Integer>
     **/
    Map<String,Integer> console();

    /**
     * @Author LC
     * @Description //TODO 查询所有用户信息,ustatus为1的不算
     * @Date 15:01 2021/9/4
     * @Param [limit 是否分页的标记，true表示分页。false表示查询所有快递, offset SQL语句的起始索引, pageNumber 每一页查询的数量]
     * @return 用户信息集合
     **/
    List<User> findAll(boolean limit,int offset,int pageNumber);

    /**
     * @Author LC
     * @Description //TODO 根据用户手机号查找对应用户,ustatus为1的不算
     * @Date 15:03 2021/9/4
     * @Param [phoneNumber 用户手机号]
     * @return 查询的用户信息，手机号不存在时返回null
     **/
    User findByPhoneNumber(String phoneNumber);

    /**
     * @Author LC
     * @Description //TODO 根据用户手机号查找对应用户,即使ustatus为1也查找
     * @Date 15:11 2021/9/6
     * @Param [phoneNumber 用户手机号]
     * @return 查询的用户信息，手机号不存在时返回null
     **/
    User findUserIncludeStatusIsOneByPhoneNum(String phoneNumber);

    /**
     * @Author LC
     * @Description //TODO 根据用户主键id查找对应用户,ustatus为1的不算
     * @Date 15:04 2021/9/4
     * @Param [id 用户主键id]
     * @return 查询的用户信息，id不存在时返回null
     **/
    User findById(int id);

    /**
     * @Author LC
     * @Description //TODO 用户信息的录入,注意手机号不能重复
     * @Date 15:05 2021/9/4
     * @Param [u 用户信息对象]
     * @return 录入的结果,true表示成功,false表示失败
     **/
    boolean insert(User u) throws DuplicateCodeException;

    /**
     * @Author LC
     * @Description //TODO 用户信息的更新
     * @Date 15:06 2021/9/4
     * @Param [id 要更新的用户d, newu 新的用户信息对象]
     * @return 更新的结果,true表示成功,false表示失败
     **/
    boolean update(int id,User newu);

    /**
     * @Author LC
     * @Description //TODO 根据用户的id删除相应数据（假删除）
     * @Date 15:07 2021/9/4
     * @Param [id 用户的id]
     * @return 删除的结果,true表示成功,false表示失败
     **/
    boolean delete(int id);
}
